#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
day 34 homework
"""
# 1.你了解生产者模型消费者模型么？如何实现？
"""
还行吧
"""
"""
from multiprocessing import Process, JoinableQueue, Lock


def producer(jq, name, food):
    for i in range(10):
        jq.put(food)
        print('%s做出来了%s  %s' % (name, food, i))
    jq.join()


def consumer(jq, name):
    count = 0
    while True:
        food = jq.get()
        count += 1
        print('%s吃了个%s %s' % (name, food, count))
        jq.task_done()


if __name__ == '__main__':
    jq = JoinableQueue()
    p = Process(target=producer, args=(jq, 'glacier', '金华火腿加面包'))
    p.start()
    p1 = Process(target=consumer, args=(jq, 'panda'))
    p1.daemon = True
    p1.start()
    p.join()
"""
# 2.GIL锁是怎么回事?
"""
GIL锁导致了线程不能并行，可以并发。
"""
# 3.请简述进程和线程的区别？
"""
进程：开销大，数据隔离，是计算机中最小的资源分配单位。
线程：开销小，数据共享，是计算机中可以被CPU调度的最小单位，线程是进程中的一部分，每个进程最少有一个线程。
"""
# 4.多进程之间是否能实现数据共享？用哪个模块实现？
"""
多进程之间可以通过multiprocessing模块Queue类（进程队列）实现数据共享。
"""
# 生成器练习题
# 1.读代码猜答案
# g1 = filter(lambda n: n % 2 == 0, range(10))    # 0 2 4 6 8
# g2 = map(lambda n: n * 2, range(3))     # 0 2 4
# for i in g1:
#     for j in g2:
#         print(i * j)
"""
0   0   0
"""

# 2.以下代码的输出是什么？请给出答案并解释。
def multipliers():
    return [lambda x: i * x for i in range(4)]
print([m(2) for m in multipliers()])
"""
[6,6,6,6]
"""
# 请修改multipliers的定义来产生期望的结果。
"""
def multipliers():
    return (lambda x: i * x for i in range(4))
print([m(2) for m in multipliers()])
"""